package com.xuelang.pipeline.client.pipeline.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

/**
 * 流水线变量设置DTO
 *
 * @author xiwen.zxg
 * @since 2024/6/7
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class TriggerSettingDTO {

    /**
     * 主键，自增
     */
    private Long id;

    /**
     * 流水线编码
     */
    private String pipelineCode;

    /**
     * 代码库触发，1开启0关闭
     */
    private Integer isCodeTrigger;

    /**
     * Push事件，1开启0关闭
     */
    private Integer isCodePush;

    /**
     * AcceptedMergeRequest事件，1开启0关闭
     */
    private Integer isCodeMerge;

    /**
     * 定时触发，1开启0关闭
     */
    private Integer isClockTrigger;

    /**
     * 触发方式，1周期触发2单次触发
     */
    private Integer triggerWay;

    /**
     * 日期选择，1按周选择2按月选择
     */
    private Integer dateSelect;

    /**
     * 触发时间 具体日期 + 时间【即，单次触发时间】
     */
    private String triggerTime;

    /**
     * 【周期定时触发】星期几
     */
    private String weekDay;

    /**
     * 【周期定时触发】具体时间（时分秒）
     */
    private String periodTriggerTime;

    /**
     * 周期时间表达式
     */
    private String cronExpression;

    /**
     * 代码变更定时器触发，1开启0关闭
     */
    private Integer isCodeChangeTrigger;

    /**
     * 运行通知，1开启0关闭
     */
    private Integer isRunNotify;

    /**
     * 通知方式，1邮箱2站内信，多选用###分割，如1###2
     */
    private String notifyWay;

    /**
     * 通知事件，待定义可选项
     */
    private String notifyEvent;

    /**
     * 通知人类型，1流水线角色2人员3角色
     */
    private Integer notifyReceiverType;

    /**
     * 多个角色或人员，用,分割，如A,B
     */
    private String notifyReceiverList;

    /**
     * 创建人
     */
    private String creatorId;

    /**
     * 创建时间
     */
    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /**
     * 更新人ID
     */
    private String updaterId;

    /**
     * 更新时间
     */
    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
}
